home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / contsens / check.ds.h < prev    next >
Text File  |  1991-01-31  |  4KB  |  143 lines

  1.  
  2.  
  3. /*   Copyright (C) 1990 Riet Oolman
  4.  
  5. This file is part of GLASS.
  6.  
  7. GLASS is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 1, or (at your option)
  10. any later version.
  11.  
  12. GLASS is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with GLASS; see the file COPYING.  If not, write to
  19. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  20.  
  21.  
  22. /* file: check.ds.h
  23.    author: H. Oolman
  24.    last changed: 25-10-'90
  25.    purpose: internal representation of Glass types
  26.             data structure definitions for some types used internally in the
  27.             type-checking algorithm
  28.    modifications:
  29.    updated by hand for new version of type-checker
  30.    p2c translated, tmc access procs.
  31. */
  32.  
  33. typedef enum {
  34.   kindSINGLEARROW, kindINT, kindFLOAT, kindBOOL, kindSTRING, kindSYSTY, kindEMPTYT, 
  35.   kindLOC, kindBASETY, kindCT, kindALL, kindAPS, kindUNKNOWN, kindSOME, kindINDIR
  36. } typckind;
  37.  
  38. typedef struct typcrec {
  39.   typckind kind;
  40.   union {
  41.     struct { /* SINGLEARROW; for -> */
  42.       struct typcrec *tcarg, *tcres;
  43.     } U0;
  44.     struct { /* SYSTY; for system types */
  45.       struct dirgraphrec *sysdirs; /* directions */
  46.       struct typcrec *syscomp; /* interface/input composition */
  47.     } U5;
  48.     struct { /* LOC; for local type var. */
  49.       symbol locname;
  50.       long inst; 
  51. /* instance nr (needed if type namings are written out to distinguish type vars. */
  52.     } U7;
  53.     struct { /* BASETY; declared as basetype */
  54.       symbol btname;
  55.       long bnr; /* seq. nr. (because of locally decld. basetypes */
  56.       orig bor; /* origin of declaration */
  57.     } U8;
  58.     struct { /* CT; for $ */
  59.       struct typcrec *tcfirst, *tcrest;
  60.     } U9;
  61.     struct { /* for declared type with 0 or more type vars. */
  62.       struct nminstrec *locs;
  63.       struct typcrec *tcall;
  64.     } U10;
  65.     struct { /* UNKNOWN; for something arbitrary, may be replaced, 
  66.         all instances point to same record for  overwriting */
  67.       long unknm; /* to distinguish different arbitrary types */
  68.       boolean mustendemp, /* true: for types allowed for b in a:b */
  69.           mustconn; /* true: for connection types */
  70.     } U12;
  71.     struct { /* SOME; for list types, may be replaced,
  72.         all instances point to same record for  overwriting */
  73.       struct typcrec *tcpart; /* composing type */
  74.       long somnr; /* to distinguish different list types */
  75.     } U13;
  76.     struct typcrec *tcind; /* INDIR; for overwriting, always equivalent to
  77.                   tcind type */
  78.   } UU;
  79. } typcrec;
  80.  
  81. #define SINGLEARROW UU.U0 
  82. #define SYSTY UU.U5 
  83. #define LOC UU.U7 
  84. #define BASETY UU.U8 
  85. #define CT UU.U9 
  86. #define ALL UU.U10 
  87. #define UNKNOWN UU.U12 
  88. #define SOME UU.U13 
  89. #define INDIR UU
  90.  
  91. typedef enum { kindCd, kindOd, kindSd } dirgraphkind;
  92.  
  93. typedef struct dirgraphrec {
  94.   dirgraphkind kind;
  95.   union {
  96.     struct {
  97.       struct dirgraphrec *dgfirst, *dgrest;
  98.     } U0;
  99.     struct dirrec *basedir;
  100.     struct {
  101.       struct dirgraphrec *dgpart, *dglast;
  102.     } U2;
  103.   } UU;
  104. } dirgraphrec;
  105.  
  106. #define Cd UU.U0
  107. #define Od UU
  108. #define Sd UU.U2
  109.  
  110. typedef enum { kindINTO, kindOUT, kindNON } dirkind;
  111.  
  112. typedef struct dirrec {
  113.   dirkind kind;
  114.   union {
  115.     int empty_union;   /* Pascal variant record was empty */
  116.   } UU;
  117. } dirrec;
  118.  
  119. typedef struct nminstrec {
  120.   struct nminstrec *next;
  121.   symbol nm;
  122.   long inst;
  123. } nminstrec;
  124.  
  125.  
  126. typedef struct envrec {
  127.   struct envrec *next;
  128.   symbol name0;
  129.   typcrec *typc0;
  130.   long uniqext;
  131. } envrec;
  132.  
  133. typedef struct errorrec {
  134.   long erno;
  135.   symbol nesting;
  136.   /* function names (nested) in which this happens */
  137.   orig orig;   /* origin of the nested name above */
  138.   typcrec *tyf, *tys;
  139.   symbol sym;   /* if a name wanted in error message */
  140.   val errval;
  141.   struct errorrec *next;
  142. } errorrec;
  143.